package com.ruoyi.business.vo;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.ruoyi.business.domain.EquipmentVariables;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 设备类型树状结构VO类，包含设备类型信息和关联的变量列表
 * 
 * @author ldkj
 * @date 2025-08-30
 */
@Data
public class EquipmentTypeTreeVO implements Serializable {
    
    private static final long serialVersionUID = 1L;

    /** 设备类型ID，自增主键 */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long equipmentTypeId;

    /** 父级设备类型ID，NULL表示顶级类型 */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long parentEquipmentTypeId;

    /** 设备类型名称，不能为空 */
    private String equipmentTypeName;

    /** 设备名称编码，用于标识设备类型 */
    private String equipmentTypeCode;

    /** 设备类型描述 */
    private String description;

    /** 设备制造商 */
    private String manufacturer;

    /** 设备安装日期 */
    private Date installationDate;

    /** 设备维护状态 */
    private String maintenanceStatus;

    /** 质保期（月） */
    private Long warrantyPeriod;

    /** 设备位置 */
    private String location;

    /** 运行状态 1:运行 2:空闲 3:维修 */
    private String operationStatus;

    /** 使用时长 */
    private BigDecimal usageDuration;

    /** 使用次数 */
    private Long usageCount;

    /** 预计使用时长 */
    private BigDecimal expUsageDur;

    /** 预计使用次数 */
    private Long expUsageCount;

    /** 磨损比例分析 */
    private BigDecimal wearRatioAnalysis;

    /** 剩余使用次数 */
    private Long remUsageCount;

    /** 剩余使用时长 */
    private BigDecimal remUsageDur;

    /** 子设备类型列表，用于树状结构显示 */
    private List<EquipmentTypeTreeVO> children = new ArrayList<>();

    /** 关联的设备变量列表 */
    private List<EquipmentVariables> variables = new ArrayList<>();

    /** 变量总数 */
    private Integer variableCount = 0;

    /** 子类型总数 */
    private Integer childrenCount = 0;

    /**
     * 添加子设备类型
     * @param child 子设备类型
     */
    public void addChild(EquipmentTypeTreeVO child) {
        if (this.children == null) {
            this.children = new ArrayList<>();
        }
        this.children.add(child);
        this.childrenCount = this.children.size();
    }

    /**
     * 添加设备变量
     * @param variable 设备变量
     */
    public void addVariable(EquipmentVariables variable) {
        if (this.variables == null) {
            this.variables = new ArrayList<>();
        }
        this.variables.add(variable);
        this.variableCount = this.variables.size();
    }

    /**
     * 设置变量列表
     * @param variables 变量列表
     */
    public void setVariables(List<EquipmentVariables> variables) {
        this.variables = variables;
        this.variableCount = variables != null ? variables.size() : 0;
    }

    /**
     * 设置子类型列表
     * @param children 子类型列表
     */
    public void setChildren(List<EquipmentTypeTreeVO> children) {
        this.children = children;
        this.childrenCount = children != null ? children.size() : 0;
    }
}